<?php
class ImageBase
{
 private $rootPath = '/public/images/db/';
 private $noImage = array(0  => '/public/images/nophoto100.gif'
       ,200=> '/public/images/nophoto230.gif'
       ,640=> '/public/images/nophoto230.gif'
       );
 private $imageFields = array('foto', 'thumb'); //для удаления

 /**
  * Сохраняет изображение в папку
  * @param $table имя таблицы
  * @param $field имя поля
  * @param $id идентификатор записи в базе данных, к которой надо привязать изображение
  * @param $fileName имя файла с изображением
  * @param $contentType тип файла
  */
 //public function saveImage($table, $field, $id, $fileName, $contentType, $files)
 public function saveImage($table, $field, $id, $fileName, $formField, $files)
 {
 	
  $this->deleteImage($table, $field, $id);
  $path = $_SERVER['DOCUMENT_ROOT'].$this->getPath($table, $field, $id);
  //$dest = $this->getFileName($id, $fileName, $contentType, $files, $field);
  $dest = $this->getFileName($id, $files, $formField);
  //Zend_Debug::dump($path);
  //Zend_Debug::dump($dest);
  
  @mkdir($path, 0777, true);
  
  copy($fileName,$path.$dest);
 }
 public function deleteImage($table, $field, $id)
 {
  $path = $this->getPath($table, $field, $id);
  $image = $this->getImage($path, $id);
  if($image)
  {
   unlink($_SERVER['DOCUMENT_ROOT'].$path.$image);
  }
 }
 /**
  * Возвращает базовый путь до картинки включая корень
  */
 public function getBasePath($table, $field)
 {
  return $this->rootPath.$table.'/'.$field.'/';
 }
 /**
  * Возвращает полный путь до картинки
  */
 public function getPath($table, $field, $id)
 {
  $result = $this->getBasePath($table, $field);
  for($i=0; $i<strlen($id)-1; $i++)
  {
   $result.=substr($id, $i, 1).'/';
  }
  return $result;
  
 }
 public function getImageUrl($table, $field, $size, $id)
 {
  $result = $this->getPath($table, $field, $id);
  //print $result."<br>\n";
  $image = $this->getImage($result, $id);
  if($image !== false)
  {
   $result .= $image;
  }
  else {
   $result = $this->getNoImageUrl($table, $field, $size);
  }
  return $result;
  
 }
 private function getImage($path, $id)
 {
  $result = substr($id, strlen($id)-1, 1);
  $pattern = $_SERVER['DOCUMENT_ROOT'].$path.$result.'.*';
  //print $pattern."<br>\n";
  //exit;
  $files = glob($pattern);
  if($files)
  {
   $result = basename($files[0]);
  }
  else {
   $result = false;
  }
  return $result;
 }
 private function getNoImageUrl($table, $field, $size)
 {
  return $this->noImage[$size]; 
 }
 //private function getFileName($id, $fileName, $contentType, $files, $field)
 private function getFileName($id, $files, $field)
 {
  $result = substr($id, strlen($id)-1, 1);
  $pathinfo = pathinfo($files[$field]['name']);
  $result .= '.'.$pathinfo['extension'];
/*  
  switch ($contentType)
  {
   case 'image/pjpeg' : $result.='.jpg';
   break;
   case 'image/jpeg' : $result.='.jpg';
   break;
   case 'image/jpg' : $result.='.jpg';
   break;
   case 'image/gif' : $result.='.gif';
   break;
   case 'image/png' : $result.='.png';
   break;
   case 'image/x-png' : $result.='.png';
   break;
  }
*/
  return $result;
 }
 public function deleteAllImages($table, $id)
 {
  foreach($this->imageFields as $field)
  {
   $this->deleteImage($table, $field, $id);
  }
 }
 public function checkImageUrl($table, $field, $size, $id)
 {
  $result = false;
  $path = $this->getPath($table, $field, $id);
  $image = $this->getImage($path, $id);
  if($image)
  {
   $result = true;
  }
  
  return $result;
 }
 
}